package com.mmdccj.yugu.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.mmdccj.yugu.dto.SocialInfoDto;
import com.mmdccj.yugu.mapper.FollowMapper;
import com.mmdccj.yugu.mapper.UserMapper;
import com.mmdccj.yugu.service.FollowService;
import com.mmdccj.yugu.service.SocialInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author: MMDCCJ
 * @date: 2023-12-09 03:35
 */
@Service
public class FollowServiceImpl implements FollowService {
    // 自动注入FollowMapper实例
    @Autowired
    private FollowMapper followMapper;
    // 自动注入UserMapper实例
    @Autowired
    private UserMapper userMapper;
    // 自动注入SocialInfoService实例
    @Autowired
    private SocialInfoService socialInfoService;
    /**
     * 获取用户关注的所有用户的社交信息
     *
     * @param userId       用户ID
     * @param currentPage  当前页码
     * @return 包含用户关注的社交信息的PageInfo对象
     */
    @Override
    public PageInfo<SocialInfoDto> getAllFollowByUserId(String userId, int currentPage) {
        // 使用PageHelper进行分页
        PageHelper.startPage(currentPage, 20);
        // 获取用户关注的所有用户的ID列表
        List<String> followIds = followMapper.getAllFollow(userId);
        List<SocialInfoDto> sortUsers = new ArrayList<>();
        for (String id : followIds) {
            // 构造SocialInfoDto对象，包含用户基本信息和社交信息
            SocialInfoDto dto = new SocialInfoDto();
            dto.setUser(userMapper.getPublicUserInfo(id));
            dto.setSocialInfo(socialInfoService.getSocialInfoByUserId(id));
            sortUsers.add(dto);
        }
        // 返回包含用户关注的社交信息的PageInfo对象
        return new PageInfo<>(sortUsers);
    }

    /**
     * 获取关注用户的所有粉丝的社交信息
     *
     * @param userId       用户ID
     * @param currentPage  当前页码
     * @return 包含关注用户的粉丝的社交信息的PageInfo对象
     */
    @Override
    public PageInfo<SocialInfoDto> getAllFansByUserId(String userId, int currentPage) {
        // 使用PageHelper进行分页
        PageHelper.startPage(currentPage, 20);
        // 获取关注用户的所有粉丝的ID列表
        List<String> fansIds = followMapper.getAllFans(userId);
        List<SocialInfoDto> sortFans = new ArrayList<>();
        for (String id : fansIds) {
            // 构造SocialInfoDto对象，包含用户基本信息和社交信息
            SocialInfoDto dto = new SocialInfoDto();
            dto.setUser(userMapper.getPublicUserInfo(id));
            dto.setSocialInfo(socialInfoService.getSocialInfoByUserId(id));
            sortFans.add(dto);
        }
        // 返回包含关注用户的粉丝的社交信息的PageInfo对象
        return new PageInfo<>(sortFans);
    }

    /**
     * 用户关注另一个用户
     *
     * @param followerId  关注者ID
     * @param followedId  被关注者ID
     * @return 如果关注成功，返回true；否则返回false
     */
    @Override
    public boolean followUser(String followerId, String followedId) {
        return followMapper.insertFollow(followerId, followedId) > 0;
    }

    /**
     * 检查用户是否关注了另一个用户
     *
     * @param followerId  关注者ID
     * @param followedId  被关注者ID
     * @return 如果已关注，返回true；否则返回false
     */
    @Override
    public boolean checkFollow(String followerId, String followedId) {
        return followMapper.checkFollow(followerId, followedId) > 0;
    }

    /**
     * 用户取消关注另一个用户
     *
     * @param followerId  关注者ID
     * @param followedId  被关注者ID
     * @return 如果取消关注成功，返回true；否则返回false
     */
    @Override
    public boolean unFollow(String followerId, String followedId) {
        return followMapper.unFollow(followerId, followedId) > 0;
    }
}
